use phf::phf_map;

static PINYIN_TO_WADE: phf::Map<&'static str, &'static str> = phf_map! {"a" => "a",
"ai" => "ai",
"an" => "an",
"ang" => "ang",
"ao" => "ao",
"ba" => "pa",
"bai" => "pai",
"ban" => "pan",
"bang" => "pang",
"bao" => "pao",
"bei" => "pei",
"ben" => "pen",
"beng" => "peng",
"bi" => "pi",
"bian" => "pien",
"biao" => "piao",
"bie" => "pieh",
"bin" => "pin",
"bing" => "ping",
"bo" => "po",
"bu" => "pu",
"ca" => "ts'a",
"cai" => "ts'ai",
"can" => "ts'an",
"cang" => "ts'ang",
"cao" => "ts'ao",
"ce" => "ts'e",
"cen" => "ts'en",
"ceng" => "ts'eng",
"cha" => "ch'a",
"chai" => "ch'ai",
"chan" => "ch'an",
"chang" => "ch'ang",
"chao" => "ch'ao",
"che" => "ch'e",
"chen" => "ch'en",
"cheng" => "ch'eng",
"chi" => "ch'ih",
"chong" => "ch'ung",
"chou" => "ch'ou",
"chu" => "ch'u",
"chua" => "ch'ua",
"chuai" => "ch'uai",
"chuan" => "ch'uan",
"chuang" => "ch'uang",
"chui" => "ch'ui",
"chun" => "ch'un",
"chuo" => "ch'o",
"ci" => "tz'u",
"cong" => "ts'ung",
"cou" => "ts'ou",
"cu" => "ts'u",
"cuan" => "ts'uan",
"cui" => "ts'ui",
"cun" => "ts'un",
"cuo" => "ts'o",
"da" => "ta",
"dai" => "tai",
"dan" => "tan",
"dang" => "tang",
"dao" => "tao",
"de" => "te",
"dei" => "tei",
"den" => "ten",
"deng" => "teng",
"di" => "ti",
"dia" => "tia",
"dian" => "tien",
"diao" => "tiao",
"die" => "tieh",
"ding" => "ting",
"diu" => "tiu",
"dong" => "tung",
"dou" => "tou",
"du" => "tu",
"duan" => "tuan",
"dui" => "tui",
"dun" => "tun",
"duo" => "to",
"e" => "o",
"ei" => "ei",
"en" => "ên",
"eng" => "êng",
"er" => "êrh",
"fa" => "fa",
"fan" => "fan",
"fang" => "fang",
"fei" => "fei",
"fen" => "fen",
"feng" => "feng",
"fo" => "fo",
"fou" => "fou",
"fu" => "fu",
"ga" => "ka",
"gai" => "kai",
"gan" => "kan",
"gang" => "kang",
"gao" => "kao",
"ge" => "ko",
"gei" => "kei",
"gen" => "ken",
"geng" => "keng",
"gong" => "kung",
"gou" => "kou",
"gu" => "ku",
"gua" => "kua",
"guai" => "kuai",
"guan" => "kuan",
"guang" => "kuang",
"gui" => "kuei",
"gun" => "kun",
"guo" => "kuo",
"ha" => "ha",
"hai" => "hai",
"han" => "han",
"hang" => "hang",
"hao" => "hao",
"he" => "ho",
"ke" => "k'o",
"kei" => "k'ei",
"ken" => "k'en",
"keng" => "k'eng",
"kong" => "k'ung",
"kou" => "k'ou",
"ku" => "k'u",
"kua" => "k'ua",
"kuai" => "k'uai",
"kuan" => "k'uan",
"kuang" => "k'uang",
"kui" => "k'uei",
"kun" => "k'un",
"kuo" => "k'o",
"la" => "la",
"lai" => "lai",
"lan" => "lan",
"lang" => "lang",
"lao" => "lao",
"le" => "lo",
"lei" => "lei",
"leng" => "leng",
"li" => "li",
"lia" => "lia",
"lian" => "lien",
"liang" => "liang",
"liao" => "liao",
"lie" => "lieh",
"lin" => "lin",
"ling" => "ling",
"liu" => "liu",
"long" => "lung",
"lou" => "lou",
"lu" => "lu",
"luan" => "luan",
"lue" => "lüeh",
"lun" => "luen",
"luo" => "lo",
"ma" => "ma",
"mai" => "mai",
"man" => "man",
"mang" => "mang",
"mao" => "mao",
"me" => "mo",
"mei" => "mei",
"men" => "men",
"meng" => "meng",
"mi" => "mi",
"mian" => "mien",
"miao" => "miao",
"mie" => "mieh",
"min" => "min",
"ming" => "ming",
"miu" => "miu",
"mo" => "mo",
"mou" => "mou",
"mu" => "mu",
"na" => "na",
"nai" => "nai",
"nan" => "nan",
"nang" => "nang",
"nao" => "nao",
"ne" => "no",
"nei" => "nei",
"nen" => "nen",
"neng" => "neng",
"ni" => "ni",
"niao" => "niao",
"nie" => "nieh",
"nin" => "nin",
"ning" => "ning",
"niu" => "niu",
"nong" => "nung",
"nou" => "nou",
"nu" => "nu",
"nuan" => "nuan",
"nue" => "nüeh",
"nuo" => "no",
"i" => "i",
"in" => "in",
"ing" => "ing",
"o" => "o",
"ou" => "ou",
"pa" => "p'a",
"pai" => "p'ai",
"pan" => "p'an",
"pang" => "p'ang",
"pao" => "p'ao",
"pei" => "p'ei",
"pen" => "p'en",
"peng" => "p'eng",
"pi" => "p'i",
"pian" => "p'ien",
"piao" => "p'iao",
"pie" => "p'ieh",
"pin" => "p'in",
"ping" => "p'ing",
"po" => "p'o",
"pou" => "p'ou",
"pu" => "p'u",
"qi" => "ch'i",
"qia" => "ch'ia",
"qian" => "ch'ien",
"qiang" => "ch'iang",
"qiao" => "ch'iao",
"qie" => "ch'ieh",
"qin" => "ch'in",
"qing" => "ch'ing",
"qiong" => "ch'iung",
"qiu" => "ch'iu",
"qu" => "ch'ü",
"quan" => "ch'üan",
"que" => "ch'üeh",
"qun" => "ch'ün",
"ran" => "jan",
"rang" => "jang",
"rao" => "jao",
"re" => "je",
"ren" => "jen",
"reng" => "jeng",
"ri" => "jih",
"rong" => "jung",
"rou" => "jou",
"ru" => "ju",
"ruan" => "juan",
"rui" => "jui",
"run" => "jun",
"ruo" => "jo",
"sa" => "sa",
"sai" => "sai",
"san" => "san",
"sang" => "sang",
"sao" => "sao",
"se" => "se",
"sen" => "sen",
"seng" => "seng",
"sha" => "sha",
"shai" => "shai",
"shan" => "shan",
"shang" => "shang",
"shao" => "shao",
"she" => "she",
"shei" => "shei",
"shen" => "shen",
"sheng" => "sheng",
"shi" => "shih",
"shou" => "shou",
"shu" => "shu",
"shua" => "shua",
"shuai" => "shuai",
"shuan" => "shuan",
"shuang" => "shuang",
"shui" => "shui",
"shun" => "shun",
"shuo" => "shuo",
"si" => "ssu",
"song" => "sung",
"sou" => "sou",
"su" => "su",
"suan" => "suan",
"sui" => "sui",
"sun" => "sun",
"suo" => "so",
"ta" => "t'a",
"tai" => "t'ai",
"tan" => "t'an",
"tang" => "t'ang",
"tao" => "t'ao",
"te" => "t'e",
"tei" => "t'ei",
"teng" => "t'eng",
"ti" => "t'i",
"tian" => "t'ien",
"tiao" => "t'iao",
"tie" => "t'ieh",
"ting" => "t'ing",
"tong" => "t'ung",
"tou" => "t'ou",
"tu" => "t'u",
"tuan" => "t'uan",
"tui" => "t'ui",
"tun" => "t'un",
"tuo" => "t'o",
"wa" => "wa",
"wai" => "wai",
"wan" => "wan",
"wang" => "wang",
"wei" => "wei",
"wen" => "wen",
"weng" => "weng",
"wo" => "wo",
"wu" => "wu",
"u" => "u",
"uo" => "o",
"va" => "va",
"ve" => "ve",
"xi" => "hsi",
"xia" => "hsia",
"xian" => "hsien",
"xiang" => "hsiang",
"xiao" => "hsiao",
"xie" => "hsieh",
"xin" => "hsin",
"xing" => "hsing",
"xiong" => "hsiung",
"xiu" => "hsiu",
"xu" => "hsü",
"xuan" => "hsüan",
"xue" => "hsüeh",
"xun" => "hsün",
"ya" => "ya",
"yan" => "yen",
"yang" => "yang",
"yao" => "yao",
"ye" => "yeh",
"yi" => "i",
"yin" => "yin",
"ying" => "ying",
"yo" => "yo",
"yong" => "yung",
"you" => "yu",
"yu" => "yü",
"yuan" => "yüan",
"yue" => "yüeh",
"yun" => "yün",
"za" => "tsa",
"zai" => "tsai",
"zan" => "tsan",
"zang" => "tsang",
"zao" => "tsao",
"ze" => "tse",
"zei" => "tsei",
"zen" => "tsen",
"zeng" => "tseng",
"zha" => "cha",
"zhai" => "chai",
"zhan" => "chan",
"zhang" => "chang",
"zhao" => "chao",
"zhe" => "che",
"zhen" => "chen",
"zheng" => "cheng",
"zhi" => "chih",
"zhong" => "chung",
"zhou" => "chou",
"zhu" => "chu",
"zhua" => "chua",
"zhuai" => "chuai",
"zhuan" => "chuan",
"zhuang" => "chuang",
"zhui" => "chui",
"zhun" => "chun",
"zhuo" => "cho",
"zi" => "tzŭ",
"zong" => "tsung",
"zou" => "tsou",
"zu" => "tsu",
"zuan" => "tsuan",
"zui" => "tsui",
"zun" => "tsun",
"zuo" => "tso",
};

pub fn converter(input: &str) -> String {
    let table = include_str!("pinyin2hanzi.txt");
    let mut result = String::new();
    for c in input.chars() {
        if !c.is_ascii_alphabetic() {
            for line in table.lines() {
                let mut parts = line.split_terminator("=");
                let pinyin = parts.next().unwrap();
                let hanzi = parts.next().unwrap();
                if hanzi.contains(c) {
                    result.push_str(PINYIN_TO_WADE.get(pinyin).or(Some(&pinyin)).unwrap());
                    result.push(' ');
                    break;
                }
            }
        }
    }
    if result.len() == 0 {
        return result;
    }
    result.trim().split_at(1).0.to_uppercase() + result.trim().split_at(1).1
}
